
# class doc 、init 函数、new函数、hasattr 属性检测、delattr、getattr、setattr

# 类信息 帮助文档__doc__ 、类名__name__、模块名__module__、父类信息__bases__、类成员信息__dict__、继承、重写、时间格式化


class Person:
    """
        父类
    """
    action = "eat"

    def __new__(cls, *args, **kwargs):
        """
        通过一个class，返回一个实例对象。
        :param args:
        :param kwargs:
        :return:
        """
        print(cls, *args, **kwargs)
        print('父类的构造函数__new__')

        # 调用父类的new方法，并返回实例对象
        print(super(Person, cls).__new__(cls))
        return super(Person, cls).__new__(cls)

    def __init__(self, name, age):
        """
        父类的构造函数
        :param name:
        :param age:
        """
        print('父类的构造函数__init__')
        self.name = name
        self.age = age

    def show(self):
        print('------------person name:%s\tage:%s-----------------', self.name, self.age)


class Son(Person):
    """帮助文档内容
    """

    def __init__(self, score, name, age):
        print('son __init__')
        self.score = score
        Person.__init__(self, name, age)

    def show22(self):
        print('------------son name:%s\tage:%s\tscore:%s-----------------' % (self.name, self.age, self.score))


if __name__ == '__main__':

    # 实例的初始化()、方法调用
    var1 = Son(96, 'zhangsan', 24)
    var1.show22()
    print(var1.action)

    # 实例方法的各种属性操作
    if hasattr(var1, 'name'):
        print(getattr(var1, 'name'))
        setattr(var1, 'name', 'zhangjuntao')
        print(getattr(var1, 'name'))
        delattr(var1, 'name')
        print(hasattr(var1, 'name'))

    # 打印类的属性名称
    print(Son.action)
    print('文档注释：', Son.__doc__,'所属模块：', Son.__module__ ,'类名：',Son.__name__ , '父类：',Son.__bases__)
    print(Son.__dict__)

